#include "stm32f10x.h"
#include"SD.h"
#include"uart.h"

extern u8  Stop;
u8 Speech_Flag=0;
/************************************
函数功能：延时函数
函数入口：x延时时间设置参数
函数出口：无
函数说明：大约100us的延时STM32_72MHZ_
***********************************/
void Delay_100us(u32 x) 

{
	u32 y ;
	y =1600*x;
        while(y--)
        {
            for(;y>0;y--)
               ; 
        }
       
}
/************************************
函数功能：延时函数
函数入口：x延时时间设置参数
函数出口：无
函数说明：大约50us的延时(每实际的500us.定时为550us)STM32_72MHZ_
***********************************/
void Delay_50us(u16 x) 

{
	u16 y ;
	y =800*x;
        while(y--)
        {
            for(;y>0;y--)
               ; //asm("NOP");
        }
       
}

void Delay_1ms(u16 nms) 	//好像只有0.5ms的定时，每实际的5ms.定时为5.5ms	 每实际的6s.定时为6.5s
{               
   while(nms--)
   {
   	Delay_50us(20); 
   }  
}

/************************************
函数功能：向SD卡发送16位的二进制命令
函数入口：Command 命令参数
函数出口：无
函数说明：高位先发送
***********************************/
void Send_Command(u16 Command)
{
	u8 i;

//	 Delay1ms(150);
	if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7))	 //如果，空闲则播放
	{
		GPIO_SetBits(GPIOB,GPIO_Pin_8);	   //输出继电器
		Delay1ms(15);
		GPIO_SetBits(GPIOB,GPIO_Pin_6);	   //电源继电器
		Delay1ms(30);
		
		RST_0;
		Delay_1ms(15);
		RST_1;
		Delay_1ms(40);
		 CS_0;
		 Delay_1ms(15);
		 for(i=0;i<8;i++)
		 {
		 	CLK_0;
	 		if(Command&0x01)
			{
				DATA_1;
			}
			else
			{
				DATA_0;
			}
			 Command>>=1;
			 Delay_50us(4);	   /* 时钟周期300us */ 
			 CLK_1;
			 Delay_50us(4);
		 }
		 CS_1;
		 DATA_1;	   //发送完后都要置高
		 CLK_1;
	
		 Speech_Flag=1;
	}
	 
}
void Speech_Play(u8 Site)
{
	switch(Site)
	{
		case 0x00:	 if(Stop){ Stop=0;Site=0;Send_Command(0x00);}Delay_100us(50);break;//离站温馨提示
		case 0x01:	 Send_Command(0x03);Delay_100us(50);break; //弯道温馨提示,延时250ms测速
				 //1号站点标志门						
		case 0x02:	 Send_Command(0x05);Delay_100us(50);break; //站点1
				  //2号站点天子上索道下
		case 0x03:	 Send_Command(0x06);Delay_100us(50);break;
					//3号站点十里画廊 3~4
		case 0x04:	 Send_Command(0x07);Delay_100us(50);break;
		case 0x05:	 Send_Command(0x07);Delay_100us(50);break;
					 //4号站点水绕四门 5~7
		case 0x06:	 Send_Command(0x08);Delay_100us(50);break;
		case 0x07:	 Send_Command(0x08);Delay_100us(50);break;
		case 0x08:	 Send_Command(0x08);Delay_100us(50);break;
					//5号站点 木岗		8					 
		case 0x0a:	 Send_Command(0x0A);Delay_100us(50);break;
					     //6号站点  百龙天梯下 9
		case 0x09:	 Send_Command(0x09);Delay_100us(50);break;
					 //7号站点 天子山索道上	  10
		case 0x0b:	 Send_Command(0x0B);Delay_100us(50);break;
					   	//8号站点	贺龙公园  11~12
		case 0x0c:	 Send_Command(0x0C);Delay_100us(50);break;
		case 0x0d:	 Send_Command(0x0C);Delay_100us(50);break;
					   	//9号站点 天子山	   13~14
		case 0x0e:	 Send_Command(0x0D);Delay_100us(50);break;
		case 0x0f:	 Send_Command(0x0D);Delay_100us(50);break;
						//10号站点	   点将台  15~16
		case 0x10:	 Send_Command(0x0e);Delay_100us(50);break;
		case 0x11:	 Send_Command(0x0e);Delay_100us(50);break;
					   //11号站点  神堂湾	   17~18
		case 0x12:	 Send_Command(0x0f);Delay_100us(50);break;
		case 0x13:	 Send_Command(0x0f);Delay_100us(50);break;
					   //12号站点	   大观台	19~20
		case 0x14:	 Send_Command(0x10);Delay_100us(50);break;
		case 0x15:	 Send_Command(0x10);Delay_100us(50);break;
					  //13号站点	  	 三岔路口  21~23
		case 0x16:	 Send_Command(0x11);Delay_100us(50);break;
		case 0x17:	 Send_Command(0x11);Delay_100us(50);break;
		case 0x18:	 Send_Command(0x11);Delay_100us(50);break;
					   //14号站点	泗南峪		  24
		case 0x19:	 Send_Command(0x17);Delay_100us(50);break;
						//15号站点		 乌龙寨	  25~26
		case 0x1a:	 Send_Command(0x12);Delay_100us(50);break;
		case 0x1b:	 Send_Command(0x12);Delay_100us(50);break;
					  //16号站点	天下第一桥	  27~28
		case 0x1c:	 Send_Command(0x13);Delay_100us(50);break;
		case 0x1d:	 Send_Command(0x13);Delay_100us(50);break;
					  //17号站点		 迷魂台	  29~30
		case 0x1e:	 Send_Command(0x14);Delay_100us(50);break;
		case 0x1f:	 Send_Command(0x14);Delay_100us(50);break;
					 //18号站点		后花园		  31~32
		case 0x20:	 Send_Command(0x15);Delay_100us(50);break;
		case 0x21:	 Send_Command(0x15);Delay_100us(50);break;
						//19号站点	   	百龙天梯上	33
		case 0x22:	 Send_Command(0x16);Delay_100us(50);break;
						//20号站点		老磨湾		34				  
		case 0x23:	 Send_Command(0x18);Delay_100us(50);break;
						   //21号站点	 黄石寨索道下 35
		case 0x24:	 Send_Command(0x19);Delay_100us(50);break;
							//22号站点	   	杨家界	36
		case 0x25:	 Send_Command(0x1b);Delay_100us(50);break;
						//23号站点	百里坡/杨家界索道下站		37~38
		case 0x26:	 Send_Command(0x1c);Delay_100us(50);break;										  
		case 0x27:	 Send_Command(0x1c);Delay_100us(50);break;
						//24号站点	 龙凤庵		39
		case 0x28:	 Send_Command(0x1a);Delay_100us(50);break;

		   //25号站点	 黄石寨索道下		45
		case 0x2e:	 Send_Command(0x19);Delay_100us(50);break;
		   //26号站点	 龙凤庵		46
		case 0x2f:	 Send_Command(0x1d);Delay_100us(50);break;

		default :break;
	
		
	}
}
/************************************
函数功能：SD卡初始化
函数入口：无
函数出口：无
函数说明：
***********************************/
void SD_Init(void)
{
	CLK_1;
	DATA_1;
	CS_1;
	RST_1;
	Delay_1ms(10);
	RST_0;
	Delay_1ms(25);
	RST_1;
	Delay_1ms(60);	 

}
